Aunque siempre intento cerrar las sesiones SSH contra las VMs con las que trabajo, se dan situaciones en las que una sesión se puede quedar colgada.
He buscado cómo finalizar estas sesiones y he encontrado diferentes formas de alcanzar el mismo resultado (mira How to Kill Inactive SSH Sessions, Kill Inactive and Idle Linux Users o Terminate dropped SSH sessions).
Gracias a uno de los artículos referenciados, he conocido el comando w, que proporciona un resumen preciso pero conciso de la actividad de todos los usuarios conectados al sistema.
La salida del comando w incluye una columna que indica cuánto tiempo lleva inactivo un usuario, por lo que es sencillo distinguir cuál es la sesión abandonada y cuál la activa.
operador@docker-host:~$ wUna vez determinada la sesión objetivo, tenemos que determinar el proceso padre creado por el usuario cuando tenía sesión activa. La manera de obtener este proceso, es usando el comando pstree -p. En nuestro caso estamos interesados en las conexiones SSH abandonadas, por lo que usamos grep sshd para filtrar:
12:44:00 up 7:05, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
operador pts/0 192.168.150.1 12:43 43.00s 0.09s 0.09s -bash
operador pts/2 192.168.150.1 11:05 0.00s 0.18s 0.00s w
operador@docker-host:~$ pstree -p | grep sshDe las dos sesiones, en la que estamos activos es aquella en la que se ha lanzado grep, por lo que tenemos que matar el PID 4656.
|-sshd(650)-+-sshd(4513)---sshd(4515)---bash(4516)-+-grep(4684)
| `-sshd(4654)---sshd(4656)---bash(4657)
kill 4656Tras finalizar la sesión abandonada, verificamos ejecutando el comando w de nuevo:
operador@docker-host:~$ w
12:57:16 up 7:18, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
operador pts/2 192.168.150.1 11:05 7.00s 0.18s 0.00s w
Comentarios